Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt:如何实现QDialog状态栏_C++_Qt_Qdialog - Fatal编程技术网

C++ Qt:如何实现QDialog状态栏

C++ Qt:如何实现QDialog状态栏,c++,qt,qdialog,C++,Qt,Qdialog,我有QDialog,它是用QDesigner精心设计的,我在网上看到我可以添加QStatusBar,代码如下: #include <QDialog> #include <QStatusBar> #include <QLayout> #include <QApplication> #include <QTextEdit> #include <QStatusTipEvent> class Dialog : public QDi

我有
QDialog
,它是用
QDesigner
精心设计的,我在网上看到我可以添加
QStatusBar
,代码如下:

#include <QDialog>
#include <QStatusBar>
#include <QLayout>
#include <QApplication>
#include <QTextEdit>
#include <QStatusTipEvent>

class Dialog : public QDialog {
public:
Dialog() : QDialog(){
QLayout *l = new QVBoxLayout(this);
QTextEdit *te = new QTextEdit;
te->setStatusTip("XXX");
l->addWidget(te);
bar = new QStatusBar;
l->addWidget(bar);
l->setMargin(0);
l->setSpacing(0);
}
private:
QStatusBar *bar;
protected:
bool event(QEvent *e){
if(e->type()==QEvent::StatusTip){
QStatusTipEvent *ev = (QStatusTipEvent*)e;
bar->showMessage(ev->tip());
return true;
}
return QDialog::event(e);
}
};

int main(int argc, char **argv){
QApplication app(argc, argv);
Dialog dlg;
return dlg.exec();
}
#包括
#包括
#包括
#包括
#包括
#包括
类对话框:公共QDialog{
公众:
Dialog():QDialog(){
QLayout*l=新的QVBoxLayout(此);
QTextEdit*te=新的QTextEdit;
te->setStatusTip(“XXX”);
l->addWidget(te);
bar=新的QStatusBar;
l->addWidget(条);
l->setMargin(0);
l->setspace(0);
}
私人:
QStatusBar*bar;
受保护的:
布尔事件(QEvent*e){
如果(e->type()==QEvent::StatusTip){
QStatusTipEvent*ev=(QStatusTipEvent*)e;
条->显示消息(ev->提示());
返回true;
}
返回QDialog::event(e);
}
};
int main(int argc,字符**argv){
QApplication应用程序(argc、argv);
对话dlg;
返回dlg.exec();
}
就我的情况而言,这根本不起作用。。也许
QDialog
已经没有几个层可以容纳小部件了

我的问题是,我可以如何在
QDesigner
中使用palceholder,或者以某种方式推广存放
QStatusbar
类的小部件吗?我不知道

在这种情况下我能做什么?我可以实现新的
QStatusbar


谢谢

尝试添加一个QStatusBar,如下所示:

QDialog dialog;
QLayout* layoutWidget = new QVBoxLayout(&dialog);
layoutWidget ->addWidget(new QTextEdit);
QStatusBar* statusBar = new QStatusBar;
layoutWidget ->addWidget(statusBar );

我假设当你说它不工作时,你运行时没有看到状态栏

我看不出有任何方法可以完全在设计师身上做到这一点。设计师当然反对将某物升级为
QStatusBar
。我想你可以通过子类化
QStatusBar
,然后将
QWidget
升级到你的子类来愚弄设计者

但我认为我们还不需要走那条路。我认为对上面的代码进行一些调整应该会有所帮助

在设计器中,在对话框底部添加一个布局,不管是哪种布局。我把我的称为“布局”。您可以看到布局(底部压扁的红色框)。我删除了对话框中的底部边距,以便状态栏底部齐平

现在删除上面代码中关于布局l的所有内容,只需执行以下操作:

bar = new QStatusBar(this);
pUI->StatusBarLayout->addWidget(bar);
pUI->textEdit->setStatusTip("XXX");
文本编辑是设计器中添加的内容。现在,当您运行它时,您应该看到:

我希望这有帮助

编辑:


您也可以在designer中为各种小部件设置状态提示,因此,除非您愿意,否则无需在代码中设置状态提示。

我有问题,我的所有gui都已在QtDesigner中完成,如何将状态栏与QDesigner一起放置?我可以放置小部件占位符,然后创建我的状态栏并与设计器一起升级吗?我所做的只是将小部件占位符放置在设计器中,在代码中,我只是将其删除并替换为状态栏