QMainWindow中自定义槽函数控制QDockWidget的显示问题
2010-03-06 11:50
489 查看
下面是定义的一个测试QMainWindow的类,在这个类里我们来测试一下QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
label, SLOT(setNum(int)));
设计的测试思路是这样的,在QMainWindow的UI文件中画上菜单,同时在QMainWindow类文件定义QDockWiget,目的就是通过菜单的响应来测试connect函数,具体类定义如下:
//deviceinfoview.h
class DeviceInfoView : public QMainWindow
{
Q_OBJECT
public:
DeviceInfoView(QWidget *parent = 0);
~DeviceInfoView();
private:
void initDockWiget();
private:
Ui::DeviceInfoView *ui;
QDockWidget *dockWidget;
QDirModel *model;
QTreeView * treeView;
signals:
void setShowDockingSignals(bool shown);
private slots:
void setShowDockingSlot(bool shown);
};
类定义就不在详细解释,主要注意一下,我们自定义了信号void setShowDockingSignals(bool shown)和自定义了槽函数void setShowDockingSlot(bool shown)。
下面看源文件:
////deviceinfoview.cpp
DeviceInfoView::DeviceInfoView(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::DeviceInfoView)
, bShow(false)
{
ui->setupUi(this);
model = new QDirModel;
model->setReadOnly(false);
model->setSorting(QDir::DirsFirst|QDir::IgnoreCase|QDir::Name);
ui->deviceTreeView->setModel(model);
ui->deviceTreeView->header()->setStretchLastSection(true);
ui->deviceTreeView->header()->setSortIndicator(0,Qt::AscendingOrder);
ui->deviceTreeView->header()->setSortIndicatorShown(true);
ui->deviceTreeView->header()->setClickable(true);
QModelIndex index = model->index(QDir::rootPath());
ui->deviceTreeView->expand(index);
ui->deviceTreeView->scrollTo(index);
ui->deviceTreeView->resizeColumnToContents(0);
QHBoxLayout *btnLayout = new QHBoxLayout;
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(ui->deviceTreeView);
mainLayout->addLayout(btnLayout);
this->setLayout(mainLayout);
///this->setCentralWidget(ui->deviceTreeView);
ui->actionDocking->setCheckable(true); //将设备器工具栏菜单设置为可复选
ui->actionDocking->setChecked(true); //默认为选中
ui->actionDocking->setVisible(true); //默认为显示设备器工具栏
initDockWiget();
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(setShowDocking()));
connect(ui->actionDocking, SIGNAL(triggered(bool)),dockWidget, SLOT(setShown(bool)));
}//end of construction DeviceInfoView
DeviceInfoView::~DeviceInfoView()
{
delete ui;
}//end of distruciton DeviceInfoView
void DeviceInfoView::initDockWiget(){
QWidget *dv = new QLabel("Docking");
dockWidget = new QDockWidget("Test",this);
dockWidget->setAllowedAreas(Qt::RightDockWidgetArea);
dockWidget->setFeatures(QDockWidget::AllDockWidgetFeatures);
dockWidget->setFloating(false);
dockWidget->setWidget(dv);
dockWidget->setVisible(true);
addDockWidget(Qt::RightDockWidgetArea,dockWidget);
}//end of method initDockWiget
void DeviceInfoView::setShowDockingSlot(bool shown){
dockWidget->setShown(shown);
}//end of slots setShowDockingSlot
以上是完整的源文件,我测试的时候,点击菜单按钮,能够正常的隐藏和显示dockWidget,但是当我将connect(ui->actionDocking, SIGNAL(triggered(bool)),dockWidget, SLOT(setShown(bool)));这一句的SLOT换成我自定义的槽函数setShowDockingSlot(bool shown)的时候,dockWidget就无法正常隐藏和显示了,点击菜单毫无反应。
请问各位达人,在自定义的槽函数中同样是通过QDockWidget对象dockWidget来调用了setShown(bool),为何无法正常控制dockWidget的隐藏和显示呢?
QT Creator 在ubuntu下编写的源代码已上传我的资源 http://download.csdn.net/source/2101907。
期待与各位热心达人交流!
QQ453489997
label, SLOT(setNum(int)));
设计的测试思路是这样的,在QMainWindow的UI文件中画上菜单,同时在QMainWindow类文件定义QDockWiget,目的就是通过菜单的响应来测试connect函数,具体类定义如下:
//deviceinfoview.h
class DeviceInfoView : public QMainWindow
{
Q_OBJECT
public:
DeviceInfoView(QWidget *parent = 0);
~DeviceInfoView();
private:
void initDockWiget();
private:
Ui::DeviceInfoView *ui;
QDockWidget *dockWidget;
QDirModel *model;
QTreeView * treeView;
signals:
void setShowDockingSignals(bool shown);
private slots:
void setShowDockingSlot(bool shown);
};
类定义就不在详细解释,主要注意一下,我们自定义了信号void setShowDockingSignals(bool shown)和自定义了槽函数void setShowDockingSlot(bool shown)。
下面看源文件:
////deviceinfoview.cpp
DeviceInfoView::DeviceInfoView(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::DeviceInfoView)
, bShow(false)
{
ui->setupUi(this);
model = new QDirModel;
model->setReadOnly(false);
model->setSorting(QDir::DirsFirst|QDir::IgnoreCase|QDir::Name);
ui->deviceTreeView->setModel(model);
ui->deviceTreeView->header()->setStretchLastSection(true);
ui->deviceTreeView->header()->setSortIndicator(0,Qt::AscendingOrder);
ui->deviceTreeView->header()->setSortIndicatorShown(true);
ui->deviceTreeView->header()->setClickable(true);
QModelIndex index = model->index(QDir::rootPath());
ui->deviceTreeView->expand(index);
ui->deviceTreeView->scrollTo(index);
ui->deviceTreeView->resizeColumnToContents(0);
QHBoxLayout *btnLayout = new QHBoxLayout;
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(ui->deviceTreeView);
mainLayout->addLayout(btnLayout);
this->setLayout(mainLayout);
///this->setCentralWidget(ui->deviceTreeView);
ui->actionDocking->setCheckable(true); //将设备器工具栏菜单设置为可复选
ui->actionDocking->setChecked(true); //默认为选中
ui->actionDocking->setVisible(true); //默认为显示设备器工具栏
initDockWiget();
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(setShowDocking()));
connect(ui->actionDocking, SIGNAL(triggered(bool)),dockWidget, SLOT(setShown(bool)));
}//end of construction DeviceInfoView
DeviceInfoView::~DeviceInfoView()
{
delete ui;
}//end of distruciton DeviceInfoView
void DeviceInfoView::initDockWiget(){
QWidget *dv = new QLabel("Docking");
dockWidget = new QDockWidget("Test",this);
dockWidget->setAllowedAreas(Qt::RightDockWidgetArea);
dockWidget->setFeatures(QDockWidget::AllDockWidgetFeatures);
dockWidget->setFloating(false);
dockWidget->setWidget(dv);
dockWidget->setVisible(true);
addDockWidget(Qt::RightDockWidgetArea,dockWidget);
}//end of method initDockWiget
void DeviceInfoView::setShowDockingSlot(bool shown){
dockWidget->setShown(shown);
}//end of slots setShowDockingSlot
以上是完整的源文件,我测试的时候,点击菜单按钮,能够正常的隐藏和显示dockWidget,但是当我将connect(ui->actionDocking, SIGNAL(triggered(bool)),dockWidget, SLOT(setShown(bool)));这一句的SLOT换成我自定义的槽函数setShowDockingSlot(bool shown)的时候,dockWidget就无法正常隐藏和显示了,点击菜单毫无反应。
请问各位达人,在自定义的槽函数中同样是通过QDockWidget对象dockWidget来调用了setShown(bool),为何无法正常控制dockWidget的隐藏和显示呢?
QT Creator 在ubuntu下编写的源代码已上传我的资源 http://download.csdn.net/source/2101907。
期待与各位热心达人交流!
QQ453489997
相关文章推荐
- QDockWidget 在QMainWindow中一直显示的问题解决方案
- 修复Window远程控制Ubuntu只显示桌面的问题
- 在QMainWindow中利用多个QDockWidget构成标签页tab
- 关于Iframe 与视频播放器显示被遮住的问题/Wbox自定义关闭函数
- QDockWidget 在QMainWindow中一直显示的问题解决方案
- Qt:关于自定义widget显示不出背景颜色的问题
- 控制字符显示长度的自定义函数
- linux和window下mkdir函数问题(转-锦曦月)
- Android Studio 显示函数用法提示悬浮窗,解决fetching documentation问题
- 解决python3中自定义wsgi函数,make_server函数报错的问题
- 解决Android IED自动加载函数形参显示为arg0,arg1的问题
- 解决android7.0 popwindow设置showAsDropdown不显示在控件下方的问题
- 【shell脚本】函数:控制颜色、定位、居中显示
- Window 与 Widget,QDialog的exec()函数
- JS窗口问题处理:使弹出窗口保持前端显示的几种方法,及window窗体对象open()和showModalDialog()用法
- [C] 跨平台使用TCHAR——让Linux等平台也支持tchar.h,解决跨平台时的格式控制字符问题,多国语言的同时显示(兼容vc/gcc/bcb,支持Windows/Linux/Mac)
- 求助(关于自定义函数位置的问题)
- 7.10 WPF 流水账 Tooltip自定义模版后不能显示内容的问题——ControlTemplate的秘密
- 基于拉格尔函数模型的预测控制在线自辩识问题
- Jquery-1.3.2在IE8中用toggle控制table 的 tr td显示和隐藏问题