Qt 4:如何在主窗口菜单中插入QAction
Qt 4: How to insert QAction in menu of mainwindow
我的问题是从外部获得自定义小部件的QAction并插入主窗口的菜单。有QActionWidget,但它在菜单中插入自定义小部件。
class QDESIGNER_WIDGET_EXPORT Photo_list: public QWidget
{
Q_OBJECT
public:
Photo_list(QWidget* parent = 0);
~Photo_list();
int count();
QString returnImagePath(const int i);
void sendSignalImageLoaded();
public slots:
void addImagePath();
void deleteImagePath();
signals:
void imageLoaded(int count);
//private:
public:
Ui::Photo_list *m_photo_list_ui;
QStringList m_image_path_list;
};
class Ui_Photo_list
{
public:
QAction *addImageAction;
QAction *deleteImageAction;
QGridLayout *gridLayout;
QListWidget *listWidget;
void setupUi(QWidget *Photo_list)
{
if (Photo_list->objectName().isEmpty())
Photo_list->setObjectName(QString::fromUtf8("Photo_list"));
Photo_list->resize(274, 210);
addImageAction = new QAction(Photo_list);
addImageAction->setObjectName(QString::fromUtf8("addImageAction"));
deleteImageAction = new QAction(Photo_list);
deleteImageAction->setObjectName(QString::fromUtf8("deleteImageAction"));
gridLayout = new QGridLayout(Photo_list);
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
gridLayout->setHorizontalSpacing(0);
listWidget = new QListWidget(Photo_list);
listWidget->setObjectName(QString::fromUtf8("listWidget"));
listWidget->setTextElideMode(Qt::ElideMiddle);
listWidget->setMovement(QListView::Static);
listWidget->setResizeMode(QListView::Adjust);
listWidget->setViewMode(QListView::IconMode);
gridLayout->addWidget(listWidget, 0, 0, 1, 1);
retranslateUi(Photo_list);
QMetaObject::connectSlotsByName(Photo_list);
} ...
如何在(*)中添加QAction * addmageaction ?(见下面的注释)
class Ui_Cpdfa
{
public:
QAction *createPdfAction;
QWidget *centralwidget;
QGridLayout *gridLayout_2;
QGridLayout *gridLayout;
QLineEdit *pdfPathLineEdit;
QPushButton *findPdfPathButton;
Photo_list *photo_list;
QToolBar *toolBar;
QMenuBar *menuBar;
QMenu *menu;
QMenu *menu_2;
void setupUi(QMainWindow *Cpdfa)
{
if (Cpdfa->objectName().isEmpty())
Cpdfa->setObjectName(QString::fromUtf8("Cpdfa"));
Cpdfa->resize(386, 303);
createPdfAction = new QAction(Cpdfa);
createPdfAction->setObjectName(QString::fromUtf8("createPdfAction"));
centralwidget = new QWidget(Cpdfa);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
gridLayout_2 = new QGridLayout(centralwidget);
gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
gridLayout = new QGridLayout();
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
pdfPathLineEdit = new QLineEdit(centralwidget);
pdfPathLineEdit->setObjectName(QString::fromUtf8("pdfPathLineEdit"));
gridLayout->addWidget(pdfPathLineEdit, 0, 0, 1, 1);
findPdfPathButton = new QPushButton(centralwidget);
findPdfPathButton->setObjectName(QString::fromUtf8("findPdfPathButton"));
gridLayout->addWidget(findPdfPathButton, 0, 1, 1, 1);
photo_list = new Photo_list(centralwidget);
photo_list->setObjectName(QString::fromUtf8("photo_list"));
gridLayout->addWidget(photo_list, 1, 0, 1, 2);
gridLayout_2->addLayout(gridLayout, 0, 0, 1, 1);
Cpdfa->setCentralWidget(centralwidget);
toolBar = new QToolBar(Cpdfa);
toolBar->setObjectName(QString::fromUtf8("toolBar"));
Cpdfa->addToolBar(Qt::TopToolBarArea, toolBar);
menuBar = new QMenuBar(Cpdfa);
menuBar->setObjectName(QString::fromUtf8("menuBar"));
menuBar->setGeometry(QRect(0, 0, 386, 21));
menu = new QMenu(menuBar);
menu->setObjectName(QString::fromUtf8("menu"));
menu_2 = new QMenu(menuBar);
menu_2->setObjectName(QString::fromUtf8("menu_2"));
Cpdfa->setMenuBar(menuBar);
toolBar->addAction(createPdfAction); //!!(*)
toolBar->addSeparator();
menuBar->addAction(menu->menuAction());
menuBar->addAction(menu_2->menuAction());
menu->addSeparator();
menu_2->addAction(createPdfAction); //!!(*)
retranslateUi(Cpdfa);
QMetaObject::connectSlotsByName(Cpdfa);
} // setupUi
我猜你正在使用Qt creator和表单编辑器单独设计表单。
你的问题实际上是你想要类A
(一个"较大"的小部件,包括子对象)访问其子对象B
(你的photo_list小部件)的命名空间中的成员。
要做到这一点,
-
将
"ui_B.h"
从B.cpp
移动到B.h
-
在
B.h
内部将私有成员Ui::B *ui;
设置为公共成员(或者您可以将A
和B
设置为好友) -
在包含
"B.h"
并拥有子对象指针*B
之后,您可以在A
中调用B->ui->actionXXX
来访问B
的所有成员,因为B->ui
指向包含从B.ui
文件创建的所有成员的命名空间(结果是在"ui_B.h"
内部)
相关文章:
- 触发另一个窗口的菜单按钮
- 如何在win32的窗口类中设置动态菜单?
- QT 窗口模式禁用菜单中的操作
- 我在窗口中有一个fltk Fl_Choice下拉菜单,但只能通过鼠标使用
- 将WM_CHANGEUISTATE发送到窗口应用程序后,当用鼠标访问菜单时,助记符不会显示在系统菜单上
- 当我最大化子窗口时,系统菜单消失
- 了解窗口是否具有菜单栏
- TrackPopupMenu 显示的系统菜单与窗口状态不匹配
- 使用WXWIDGET C 将菜单和子菜单选项添加到Mac中的窗口菜单
- 更换Windows上的系统菜单弹出窗口
- 在窗口开始菜单中创建快捷方式
- 如何将菜单栏添加到我的 WTL 对话窗口
- 如何阻止Windows在拖动窗口或按住菜单按钮时阻塞程序?< / h1 >
- 禁用主窗口的标题上下文菜单
- 如何在Qt C++中单击菜单栏中的元素时打开新的QDailog窗口
- 在顶部mac窗口上显示应用程序菜单
- opengl窗口外的菜单是如何实现的?
- QT Creator主窗口-如何从菜单中更改每个元素的界面
- 过剩窗口菜单栏在MAC OSX
- 用于创建菜单栏的c++ win32程序(程序编译并运行,也显示窗口但不显示菜单栏)