我有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();
}
Run Code Online (Sandbox Code Playgroud)
它甚至没有在我的情况下工作..也许QDialog已经有几个持有小部件的网页.
我的问题是我可以使用palceholder如何使用QDesigner或以某种方式促进那个地方持有QStatusbar类的小部件?我不知道 …
在这种情况下我该怎么办?我能实施新的QStatusbar吗?
谢谢
我认为当你说它不起作用时,你运行时没有看到状态栏.
我没有看到任何方式完全在设计师这样做.设计师肯定会拒绝向某个人宣传某些东西QStatusBar.我想你可以通过子类化来欺骗设计者QStatusBar,然后将a提升QWidget到你的子类.
但我认为我们还不需要走那条路.我认为对上面的代码进行一些调整应该有所帮助.
在设计器中,在对话框的底部添加一个布局,无关紧要.我打电话给我的'StatusBarLayout'.你可以看到布局(底部被压扁的红色框).我删除了对话框中的下边距,以便状态栏在底部是齐平的.

现在删除上面关于布局l的代码中的所有内容,然后执行以下操作:
bar = new QStatusBar(this);
pUI->StatusBarLayout->addWidget(bar);
pUI->textEdit->setStatusTip("XXX");
Run Code Online (Sandbox Code Playgroud)
这textEdit是设计师添加的东西.现在当你运行它时你应该看到:

我希望有所帮助
编辑:
您也可以在设计器中为各种小部件设置状态提示,因此除非您愿意,否则无需在代码中执行此操作.
尝试添加这样的 QStatusBar:
QDialog dialog;
QLayout* layoutWidget = new QVBoxLayout(&dialog);
layoutWidget ->addWidget(new QTextEdit);
QStatusBar* statusBar = new QStatusBar;
layoutWidget ->addWidget(statusBar );
Run Code Online (Sandbox Code Playgroud)