- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Qt Creator 创建一个简单的程序。
QPushButton 已被插入到QGraphicsView & QGraphicsScene 中。但是,插入的按钮周围有一条灰色的边界线,如下图所示。
我尝试使用样式表将其删除为“边框:无”或“大纲:无”,但我无法删除它。
如果我再次按下“绘图按钮”或将此对话框窗口移动到双屏的另一个屏幕,灰色边框就会消失。但是,当我将鼠标移到按钮上时,灰色的边界线又出现了。我需要帮助来摆脱它。
下面是我的代码。
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QGraphicsScene>
#include "drawscene.h"
namespace Ui { class MainWindow; }
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
QGraphicsScene *mainScene;
bool is_drawed;
drawScene *mDrawScene;
};
#endif // MAINWINDOW_H
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
mainScene = new QGraphicsScene(this);
ui->graphicsView->setScene(mainScene);
is_drawed = false;
mDrawScene = new drawScene(mainScene, this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
ui->graphicsView->setBackgroundBrush(QBrush("#e7e7e7"));
if (!is_drawed) {
mDrawScene->drawBttnView();
is_drawed = true;
}
}
void MainWindow::on_pushButton_2_clicked()
{
ui->graphicsView->setBackgroundBrush(QBrush("white"));
if (is_drawed) {
mDrawScene->clearBttnView();
is_drawed = false;
}
}
mroundrect.h
#ifndef MROUNDRECT_H
#define MROUNDRECT_H
#include <QGraphicsItem>
#include <QPainter>
#include <QRectF>
class mRoundRect : public QGraphicsItem
{
public:
mRoundRect();
void setRndRectPos(QRect rect);
private:
QRect rndRect;
protected:
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};
#endif // MROUNDRECT_H
mroundrect.cpp
#include "mroundrect.h"
mRoundRect::mRoundRect() { }
void mRoundRect::setRndRectPos(QRect rect) { rndRect = rect; }
QRectF mRoundRect::boundingRect() const { return QRectF(0, 0, 0, 0); }
void mRoundRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
painter->setBrush(QBrush(Qt::white));
painter->setPen(QPen(Qt::gray));
painter->drawRoundedRect(rndRect, 15.0, 15.0);
}
drawscene.h
#ifndef DRAWSCENE_H
#define DRAWSCENE_H
#include <QGraphicsProxyWidget>
#include <QGraphicsScene>
#include <QGraphicsItem>
#include <QPushButton>
#include <QStringList>
#include <QRect>
#include <QList>
#include "mroundrect.h"
class drawScene
{
public:
drawScene(QGraphicsScene *parentScene, QWidget *parent = 0);
void drawBttnView();
void clearBttnView();
private:
QGraphicsScene *mScene;
QPushButton *bttn1, *bttn2, *bttn3, *bttn4;
mRoundRect *rndRect;
void setBttnItem(QPushButton *bttn, QStringList info, QRect rect);
void freeWidget(QPushButton *bttn);
};
#endif // DRAWSCENE_H
drawscene.cpp
#include "drawscene.h"
drawScene::drawScene(QGraphicsScene *parentScene, QWidget *parent)
{
mScene = parentScene;
bttn1 = new QPushButton();
bttn2 = new QPushButton();
bttn3 = new QPushButton();
bttn4 = new QPushButton();
rndRect = new mRoundRect();
}
void drawScene::setBttnItem(QPushButton *bttn, QStringList info, QRect rect)
{
QString name = info[0],
text = info[1];
QFont bttnfnt("Calibri", 12);
bttn->setObjectName(name);
bttn->setGeometry(rect);
bttn->setText(text);
bttn->setFont(bttnfnt);
mScene->addWidget(bttn);
}
void drawScene::drawBttnView()
{
QStringList bttnInfo;
QRect bttnPos;
rndRect->setRndRectPos(QRect(30, 30, 400, 300));
mScene->addItem(rndRect);
bttnInfo.clear();
bttnInfo << "bttn1" << "TEST1";
bttnPos = QRect(100, 100, 100, 30);
setBttnItem(bttn1, bttnInfo, bttnPos);
bttnInfo.clear();
bttnInfo << "bttn2" << "TEST2";
bttnPos = QRect(250, 100, 100, 30);
setBttnItem(bttn2, bttnInfo, bttnPos);
bttnInfo.clear();
bttnInfo << "bttn3" << "TEST3";
bttnPos = QRect(100, 200, 100, 30);
setBttnItem(bttn3, bttnInfo, bttnPos);
bttnInfo.clear();
bttnInfo << "bttn4" << "TEST4";
bttnPos = QRect(250, 200, 100, 30);
setBttnItem(bttn4, bttnInfo, bttnPos);
}
void drawScene::freeWidget(QPushButton *bttn)
{
QGraphicsProxyWidget *proxy;
proxy = bttn->graphicsProxyWidget();
mScene->removeItem(proxy);
proxy->setWidget(NULL);
//bttn->setParent(NULL);
delete proxy;
}
void drawScene::clearBttnView()
{
freeWidget(bttn1);
freeWidget(bttn2);
freeWidget(bttn3);
freeWidget(bttn4);
QList<QGraphicsItem *> allItems = mScene->items();
foreach (QGraphicsItem *item, allItems) {
mScene->removeItem(item);
mScene->update();
}
}
最佳答案
如 documentation 中所述, QGraphicsView 使用 QGraphicsItem::boundingRect()
来确定项目是否需要重绘。
boundingRect
的实现返回了错误的值,从而欺骗了 QGraphicsView 场景的哪一部分应该(重新)涂成白色。
在 mroundrect.cpp 中替换:
QRectF mRoundRect::boundingRect() const { return QRectF(0, 0, 0, 0); }
与:
QRectF mRoundRect::boundingRect() const { return rndRect; }
关于c++ - 如何删除在 QGraphicsView&Scene 上添加的 QPushButton 的边界线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51960669/
我创建了一个 GUI 宽度的 Qt Creator (Qt 5.0.1),当然也使用了布局。出于美学原因,我希望 QPushButton 与放置在 GUI 其他角落的另一个 QPushButton 具
如何扩展棕色的对象(QPushButton)。 坦率地说,我曾尝试通过添加 Horizontal layout 来做到这一点,但似乎效果不佳。 如图所示,当小部件最大化时,我想扩展(仅宽度)特定
我有一个二维数组QPushButton,当用户点击它时我如何获取按钮的索引?例如当用户点击按钮 a[2][3] 时,它会显示 (2,3) ? 最佳答案 这个例子是这样的: Qt 4/5 使用对象名称
最近想要那个QPushButton当鼠标指针进入时可以发出信号。我怎样才能做到? 我知道 QPushButton 有一些已经定义好的信号,比如 clicked() , pressed() , dest
我是 PySide 的新手。我想在其单击的插槽中获取 QPushButton obj(例如使用它来获取其文本)。 button = QtGui.QPushButton("start go") butt
请注意 redb.clicked[bool].connect(self.setColor) 行,为什么要添加 [bool] 部分?我试图删除该部分,将行修改为 redb.clicked.connect
我在 Qt Designer 中设计了两种不同的 QPushButton。一个是默认的,另一个我想说清楚。在 QT Designer 中,我将后者的初始样式表设置如下: background-colo
我有一个包含以下结构的小部件和布局的大布局: QVBoxLayout QTableView QPushButton 我将布局上的边距、内边距和间距设置为 0。这在 Mac OS X 上呈现的方
我有以下按钮样式表: QPushButton:hover{ background: qlineargradient(x1 : 0, y1 : 0, x2 : 0, y2 : 1,
我有两个小部件(真实的和假的),其中一个有 QPushButton。现在我希望在另一个小部件中显示相同的按钮。我该怎么做? 我不想创建副本,我希望在不更改父级的情况下同时显示另一个小部件上的相同 QO
我在我的程序中使用 QPushButton()。使用这些按钮,我可以旋转我的对象。 到目前为止工作正常。唯一的问题是我必须单击多次才能进一步旋转对象。这有点烦人。只要我按下按钮并且对象将进一步旋转,按
我正在使用以下代码创建一个按钮。它工作正常。但我在左角得到了黄色矩形。为什么?请帮我。提前致谢, backButton = new QPushButton(tr("Back"));
我想让一些按钮看起来像你在 Skype 中看到的按钮。如何设计 QPushButton自定义形状?我不知道这样做。所以我需要一些建议。例如,我想要我的 QPushButton看起来像这样 image
我想将 QPushButton 对齐到右下角,但没有固定大小,因为如果我使用固定大小并调整窗口大小,它看起来就不再好看了。这是我的代码: self.copy_btn = QtWidgets.Q
我从 Qt 开始,每当有人将鼠标悬停在 QPushButton 上时,我想将 QPushButton 设置为不同的图标。到目前为止,这是我的代码: #include QPushButton *but
我在使用 Qt 4.6.0 和 QPushButtons 快捷方式时遇到问题: 当用户单击按钮时,我想在QTextEdit中显示特殊文本,但仅当按下按钮时,如下一旦发布,我希望出现另一个文本。 一切正
我从 Qt 开始,我想在有人将鼠标悬停在 QPushButton 上时将其设置为不同的图标。到目前为止,这是我的代码: #include QPushButton *button = new QPus
是否可以向 QPushButton 添加工具提示。我的意思是,当您将鼠标悬停在按钮上时,会出现一个小文本框(通常是黄色)并告诉用户该按钮正在做什么。 谢谢。 最佳答案 QPushButton 是 QW
我尝试在通过 QtWidgets.QColorDialog 设置 PNG 图像的颜色后更改其颜色。使用Python ---> 至 尽管如此,当我应用代码时,结果是: 它改变了我的PNG图像的背景 PN
我正在连接一个 QPushButton,它将在其中隐藏/显示框架内的小部件。 我使用 .ui 方法加载/创建了我的 GUI。 对于这个 QPushButton,我设置并检查了属性 setChecked
我是一名优秀的程序员,十分优秀!