C++ 如何在选择QComboBox后打开对话框
我有一个C++ 如何在选择QComboBox后打开对话框,c++,c++11,qt5,qcombobox,C++,C++11,Qt5,Qcombobox,我有一个QComboBox,在QToolBar上有几个选项。每次选择QComboBox都会打开一个特定的对话框窗口。 我的问题是,在组合框上选择首选索引后,没有对话框打开。为简化示例,我将同一对话框链接到所有选项: window.h 这是头文件 namespace Ui { class DredgeWindow; } class DredgeWindow : public QMainWindow { Q_OBJECT public: explicit DredgeWindow
QComboBox
,在QToolBar
上有几个选项。每次选择QComboBox
都会打开一个特定的对话框窗口。
我的问题是,在组合框上选择首选索引后,没有对话框打开。为简化示例,我将同一对话框链接到所有选项:
window.h
这是头文件
namespace Ui {
class DredgeWindow;
}
class DredgeWindow : public QMainWindow
{
Q_OBJECT
public:
explicit DredgeWindow(QWidget *parent = nullptr);
~DredgeWindow();
private:
Ui::DredgeWindow *ui;
DredgeDB *mDredgeDB;
};
疏浚窗口.cpp
DredgeWindow::DredgeWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::DredgeWindow)
{
ui->setupUi(this);
QComboBox* myComboBox = new QComboBox;
ui->toolBarControls->addWidget(myComboBox);
myComboBox->addItem("Please Select");
myComboBox->addItem("Bucket");
myComboBox->addItem("Scow");
myComboBox->addItem("Hopper Dredger");
switch(myComboBox->currentIndex()){
case 0:
// do nothing
break;
case 1:
// Go to Bucket
mDredgeDB = new DredgeDB();
mDredgeDB->show();
break;
case 2:
// Go to Scow...
mDredgeDB = new DredgeDB();
mDredgeDB->show();
break;
case 3:
// Go to Hopper Dredger
mDredgeDB = new DredgeDB();
mDredgeDB->show();
default:
break;
}
}
DredgeWindow::~DredgeWindow()
{
delete ui;
}
到目前为止,我一直在尝试使用组合框触发对话框的打开,但是一旦我释放鼠标(因此我切换-案例),我希望对话框会打开,但什么也没有发生。即使不是C++,也是有用的。但我还是用它来理解一般的方法
触发组合框并将其设置为活动状态,但除此之外,没有特定指示
提前感谢您为解决此问题指明了正确的方向 您必须将信号连接到某个插槽
当用户选择组合框中的项目时,将发送此信号。这个
已传递项的索引。请注意,即使在
选择没有改变。如果你想知道什么时候该选择
更改,请使用信号currentIndexChanged()
注意:激活的信号在此类中过载。连接到这个
通过使用函数指针的信号语法,Qt提供了一个方便的
获取函数指针的助手-qOverload
类窗口:公共QMainWindow
{
Q_对象
...
专用插槽:
组合索引无效(整数索引);
...
};
疏通窗口::疏通窗口(QWidget*父)
:QMainWindow(父级)
{
...
连接(myComboBox、QOverload::of(&QComboBox::已激活),
[=](int-index){on_-combo_-index_-activated(index);});
...
}
无效窗口::在组合索引中激活(整数索引)
{
开关(索引)
{
案例0:
//无所事事
打破
案例1:
//去死吧
mDredgeDB=new-db();
mDredgeDB->show();
打破
案例2:
//去划船。。。
mDredgeDB=new-db();
mDredgeDB->show();
打破
案例3:
//去挖泥船
mDredgeDB=new-db();
mDredgeDB->show();
违约:
打破
}
}
完美的工作方式!感谢您指出新的connect
notation!:)
class DredgeWindow : public QMainWindow
{
Q_OBJECT
...
private slots:
void on_combo_index_activated(int index);
...
};
DredgeWindow::DredgeWindow(QWidget *parent)
: QMainWindow(parent)
{
...
connect(myComboBox, QOverload<int>::of(&QComboBox::activated),
[=](int index) { on_combo_index_activated(index); });
...
}
void DredgeWindow::on_combo_index_activated(int index)
{
switch (index)
{
case 0:
// do nothing
break;
case 1:
// Go to Bucket
mDredgeDB = new DredgeDB();
mDredgeDB->show();
break;
case 2:
// Go to Scow...
mDredgeDB = new DredgeDB();
mDredgeDB->show();
break;
case 3:
// Go to Hopper Dredger
mDredgeDB = new DredgeDB();
mDredgeDB->show();
default:
break;
}
}