附加菜單我已經寫了基本圖像查看使用Qt和C++應用程序,即我有一個類延長的QMainWindow現有UI通過使用Qt Designer
ImageViewApp : public QMainWindow, private Ui::ImageViewer {
Q_OBJECT
public:
ImageViewApp (const char * InputFilename = NULL) {
setupUi (this);
}
};
與Qt Designer創建一個的.ui文件,其生成限定
class Ui_ImageViewer {
public:
void setupUi(QMainWindow *ImageViewer) { … }
};
namespace Ui {
class ImageViewer: public Ui_ImageViewer {};
} // namespace Ui
現在我想寫另一應用ImageRegistrationApp
,其中I通過含有QAction
期附加QMenu
小號延伸的ImageViewApp
的QMenuBar
頭文件出於某種目的,比如圖像註冊。此外,我想改變一些其他的東西,如windowTitle
,並將QAction
加到現有的QMenu
s的ImageViewApp
。
我正在尋找一種方法,我不需要觸摸或複製ImageViewApp
的.ui文件。我想做一些類似繼承的事情,其中對ImageViewApp
的UI的更改會影響ImageRegistrationApp
的UI。另外我希望能夠通過Qt Designer爲ImageRegistrationApp
創建和編輯附加的QMenu
和QAction
。
這可能嗎?
UPDATE:
我試圖改變ImageRegistrationApp的標題和內C++通過繼承添加QAction
到現有QMenu
在ImageViewApp
如下:
ImageRegistrationApp : public ImageViewApp {
Q_OBJECT
public:
QAction *actionTest;
ImageRegistrationApp (const char * InputFilename = NULL)
: ImageViewApp (InputFilename) {
this->setWindowTitle(QApplication::translate("ImageViewer", "ImReg", 0, QApplication::UnicodeUTF8));
actionTest = new QAction(this);
actionTest->setObjectName(QString::fromUtf8("actionTest"));
actionTest->setText(QApplication::translate("ImageViewer", "Test", 0, QApplication::UnicodeUTF8));
this->menuTools->addAction(actionTest);
}
protected slots:
void on_actionTest_triggered() {
QMessageBox::information(NULL, "Test", "Hello world!");
}
};
我也改變了繼承在ImageViewApp
到protected Ui::ImageViewer
以便能夠訪問UI元素。
如預期,也是QAction
Test
顯示了在菜單Tools
,但是當我點擊它,什麼都不會發生,雖然我希望它顯示QMessageBox
作爲slot
on_actionTest_triggered
定義我ImageRegistrationApp
標題更改。
還有什麼我必須做的,連接QAction
插槽? 我試過QObject::connect(actionTest, SIGNAL(triggered()), this, SLOT(actionTest));
但這並沒有改變任何東西。
這是可能的,但通過C++代碼更簡單。 – 2014-12-04 10:59:50
使用Qt Designer的可能性是什麼樣子? – user1192038 2014-12-04 11:19:53
是的。如果你有複雜的菜單,你應該寫一個「菜單管理器」來實現你所有的邏輯。 – 2014-12-04 11:22:03