一个QAction通过样式表调整了它的整体大小后,使用了setCheckable和setChecked在左侧添加了对勾来提示,右边文本增大后,左边的对勾并没有改变大小,应该如何改变大小?
时间: 2024-05-12 11:17:58 浏览: 14
您可以使用QStylePainter绘制QAction中的QCheckBox来手动调整其大小,代码示例如下:
```
QStylePainter painter(this);
QStyleOptionViewItem option;
option.initFrom(this);
option.rect = QRect(0, 0, newSize.width(), newSize.height());
option.state |= QStyle::State_On;
option.features |= QStyleOptionViewItem::HasCheckIndicator;
painter.drawPrimitive(QStyle::PE_IndicatorViewItemCheck, option);
```
其中,newSize为您设置的新大小。
相关问题
c++ 我要在QMenu上添加一个QListView控件,然后这个QListView控件里添加多个QAction控件
您可以按照以下步骤来实现在QMenu上添加QListView控件,然后在QListView控件中添加多个QAction控件:
1. 创建一个QMenu实例:
```c++
QMenu *menu = new QMenu(this);
```
2. 创建一个QListView实例:
```c++
QListView *listView = new QListView(this);
```
3. 设置QListView的模式为ListMode,以显示多个QAction控件:
```c++
listView->setViewMode(QListView::ListMode);
```
4. 创建多个QAction实例,并且将它们添加到QListView的model中:
```c++
QStandardItemModel *model = new QStandardItemModel(this);
QStandardItem *item1 = new QStandardItem("Action 1");
QStandardItem *item2 = new QStandardItem("Action 2");
QStandardItem *item3 = new QStandardItem("Action 3");
model->appendRow(item1);
model->appendRow(item2);
model->appendRow(item3);
listView->setModel(model);
```
5. 将QListView添加到QMenu中:
```c++
menu->setStyleSheet("QListView::item{height: 30px;}");
menu->setMinimumWidth(120);
menu->addAction(QIcon(":/icon.png"), "Menu", listView);
```
这样,您就可以在QMenu上添加一个QListView控件,并且在QListView控件中添加多个QAction控件了。请注意,您需要根据自己的需求,调整QListView和QAction的样式和大小。
那我能够在QMenu中使用吗,在QMenu添加了多个QAction时,用QScrollBar控件显示多个QAction控件
是的,你可以在QMenu中使用QScrollBar来显示多个QAction控件。QMenu并没有直接提供滚动条的功能,但是你可以使用QScrollArea来将QMenu包装起来,从而实现滚动条的效果。
下面是一个简单的例子,演示如何在QMenu中使用QScrollBar来显示多个QAction控件:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QAction, QScrollArea, QVBoxLayout, QWidget
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建QMenu对象和QAction对象
menu = QMenu(self)
for i in range(20):
action = QAction('Action {}'.format(i), self)
menu.addAction(action)
# 创建QScrollArea对象,并将QMenu添加到QScrollArea中
scrollArea = QScrollArea(self)
scrollArea.setWidgetResizable(True)
widget = QWidget()
layout = QVBoxLayout(widget)
layout.addWidget(menu)
scrollArea.setWidget(widget)
# 将QScrollArea设置为主窗口的中心窗口
self.setCentralWidget(scrollArea)
if __name__ == '__main__':
app = QApplication([])
window = MyWindow()
window.show()
app.exec_()
```
在上面的例子中,我们创建了一个MyWindow类,继承自QMainWindow,然后在initUI()函数中创建了一个QMenu对象和多个QAction对象,并将它们添加到QMenu中。接着,我们创建了一个QScrollArea对象,并将QMenu添加到QScrollArea中。最后,将QScrollArea设置为主窗口的中心窗口,从而实现了滚动条的效果。
需要注意的是,由于QMenu是一个弹出式菜单,它并不是一个独立的窗口,而是依附于某个QWidget或QMainWindow的。因此,在使用QScrollArea包装QMenu时,需要将QScrollArea作为主窗口的中心窗口。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)