我想更改QFrame组件的边框颜色.也尝试使用样式表但在运行时没有效果.在我的项目中有各种各样的Dialog UI,基本上是QFrame,我想改变所选对话框的边框颜色,即QFrame边框颜色.在QT中是否有任何解决方法.如下所示,当选择它的相应帧边框颜色中的任何一个应该被改变时,有两个对话框

我需要实现LineEdit小部件,可以在文本区域的右端添加工具按钮.我知道有两种方法可以做到这一点但两种解决方案看起来都很丑
1)添加工具按钮作为QLineEdit的子窗口小部件,并处理resizeEvent以正确定位它们.主要缺点是如果文本足够长,它可能出现在工具按钮下.
2)另一个解决方案是将行编辑和按钮放在框架内并覆盖样式以隐藏线条框架并使QFrame看起来像QLineEdit.
我需要一种最好的方法来实现这样的小部件.我的小部件也应该是风格意识.
所以我有这个QFrame是父窗口小部件(this在代码中表示).在这个小部件中,我想QWidget从顶部放置一个10 px(从底部放置10 px,因此它的高度为140px,而父级为160px).在QWidget将具有多个在其内部自定义按钮在垂直布局,在滚动区域,使得当按钮组合的高度超过QWidget's在自动高度(140px),滚动集.由于滚动不是针对整个父窗口小部件,而是针对子窗口小部件,因此滚动应仅适用于此处的子窗口小部件.这是我的代码:
//this is a custom button class with predefined height and some formatting styles
class MyButton: public QPushButton
{
public:
MyButton(std::string aText, QWidget *aParent);
};
MyButton::MyButton(std::string aText, QWidget *aParent): QPushButton(QString::fromStdString(aText), aParent)
{
this->setFixedHeight(30);
this->setCursor(Qt::PointingHandCursor);
this->setCheckable(false);
this->setStyleSheet("background: rgb(74,89,98); color: black; border-radius: 0px; text-align: left; padding-left: 5px; border-bottom: 1px solid black;");
}
//this is where I position the parent widget first, and then add sub widget
this->setGeometry(x,y,width,160);
this->setStyleSheet("border-radius: 5px; background:red;"); …Run Code Online (Sandbox Code Playgroud) 我需要绘制透明窗口(QLabel或QFrame或QWidget),但不使用WA_TranslucentBackground. 原因是窗口将包含通过 OpenGL 呈现的其他子窗口小部件,并且使用该属性使这些窗口在 Windows 上不可见,如此处所述。这在 Mac 上运行良好,但我只需要在 Windows 上使用不同的解决方案,因为它在那里不起作用。我试过这个:设置一个空白pixmap. 但它仍然以灰色背景显示:
#include <QApplication>
#include <QLabel>
#include <QBitmap>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel l;
l.setWindowFlags(Qt::FramelessWindowHint);
QPixmap p("");
l.setPixmap(p);
l.setScaledContents(true);
l.resize(300, 500); //just to test my idea
l.setMask(p.scaled(l.width(),l.height(),Qt::IgnoreAspectRatio,
Qt::SmoothTransformation).mask());
l.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议在 Windows 上实现这一目标的任何其他方法,即完全透明的窗口?平台 - Qt 5.3.1,32 位。
PS - 它不需要表现得像半透明窗口,即可以通过渲染的小部件的透明部分单击背景WA_TranslucentBackground。这里只要它是透明的就可以了,它不需要“通过”点击。
我QFrame只是使用彩色边框,因为我找不到更改颜色的方法QDialog。那么因为篡改了
QFrame边框,也在影响着QLabel外观,有什么办法可以避免这种情况呢?
编辑:
这是我正在使用的样式表,其中QLabels' 没有任何效果。它正在采取QFrames'
QWidget {
background-color: black;
}
QLabel {
color:white;
border: solid 2px black;
font: bold 19px Sans Serif;
}
QFrame {
border: solid 2px white;
border-radius: 4px;
}
Run Code Online (Sandbox Code Playgroud) 我已将 QT 中主窗口的颜色设置为灰色。
ui(new Ui ::MainWindow)
ui-> setupUi(this)
this->setStyleSheet("background-color: grey;");
Run Code Online (Sandbox Code Playgroud)
我尝试了多种方法来设置 QFrame 的颜色,但是它采用我设置的默认灰色。我尝试的一种方法如下。
ui->frame->setStyleSheet("color:rgb(255,255,255)");
Run Code Online (Sandbox Code Playgroud)
我尝试使用 setStyleSheet 方法更改 QFrame 的颜色,但无论我分配哪种颜色,它都保持灰色。我尝试过设置背景、边框和颜色。有什么方法可以做到这一点,我忽略了吗?
有没有办法在 PyQt5 中获取 QFrame 的实际大小?我的显示器分辨率是 1920x1080。在我将 QFrame 添加到布局中后,在我的例子中,它填充了整个窗口,大约 1200px。然而 width() 命令返回 640。似乎默认大小 640x480 并且它不会因查询而改变?
我希望能够在不使用布局的情况下将小部件居中,b/ci 我计划在我的设计中使用多个覆盖层。
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import PyQt5.QtWidgets
import sys
class MainWindow(QMainWindow):
def __init__(self, parent):
QMainWindow.__init__(self, parent)
self.setWindowTitle('Sample')
size_object = PyQt5.QtWidgets.QDesktopWidget ().screenGeometry ( -1 ) # active screen
scr_width = size_object.width ()
scr_height = size_object.height()
self.resize ( 3 / 4 * scr_width, 3 / 4 * scr_height )
qr = self.frameGeometry() # geometry of the main window
cp = QDesktopWidget().availableGeometry().center() # center …Run Code Online (Sandbox Code Playgroud) 我正在制作桌面旋转木马应用程序.在那里,我需要显示图像小部件,其中可能还包含其他子小部件.为此,我使用QFrame带有所需图像作为背景.这是我想要使用的图像:图像链接.我想要的是只有图像显示,没有背景图像或任何东西出现,所以对用户来说它看起来就像图像.这是我的代码:
setGeometry(QRect(100, 20, 325,400));
setFrameStyle(QFrame::StyledPanel);
setStyleSheet("QFrame#ImageFrame { background-color: transparent; background: url(:icon/ipad-skin); }");
setAutoFillBackground(false);
Run Code Online (Sandbox Code Playgroud)
但是,我得到了这个结果:

我也尝试了这个(从这里获得)(并删除样式表):
void MyWidget::paintEvent(QPaintEvent *p)
{
QPainter* pPainter = new QPainter(this);
pPainter->drawPixmap(rect(), QPixmap(":icon/newskin.png"));
delete pPainter;
QWidget::paintEvent(p);
}
Run Code Online (Sandbox Code Playgroud)
没有什么不同,完全相同的结果.背景的灰色仍然显示出来.
如何制作QFramego 的灰色背景并仅显示图像(我设置的尺寸与图像相同)?
PS我知道类似的问题已在这里得到解答:QWidget透明背景(但不是孩子们),这里:无框和透明窗口qt5但这些并不能解决我的问题.最后一个解决方案使我的QFrame看起来像这样:

QFrame现在有一个标题栏,这首先是我想要的东西.
编辑 - 此解决方案有效,但在我的用例中,我需要显示通过QFrame内的GL渲染的图像(具体来说,在我们可以在这里看到的iPad图像中的视口中).在Windows中,设置Qt::WA_TranslucentBackground属性会使GL渲染图像不可见.但它在Mac上运行良好.所以我正在寻找一种适用于Windows的解决方案.
qframe ×8
qt ×7
c++ ×5
qwidget ×3
colors ×1
pyqt ×1
pyqt5 ×1
python ×1
qlabel ×1
qlineedit ×1
qscrollarea ×1
stylesheet ×1
transparent ×1