如何在qmake项目文件中将文件内容读入变量?例如,我想KEY从文件中读取内容并将其传递给编译器:
DEFINES += KEY=**some magic and filename here**
Run Code Online (Sandbox Code Playgroud) 我已经QSet<QuadPattern> texture;想要循环修改所有QuadPattern。
foreach 这不是一个好的解决方案,因为它会复制。
使用此代码:
Run Code Online (Sandbox Code Playgroud)QMutableSetIterator<QuadPattern> it(texture); while (it.hasNext()) { it.next(); it.value().setCoordinate(...)); }
我收到编译错误:
error: C2662: 'QuadPattern::setCoordinate' : cannot convert 'this' pointer from 'const QuadPattern' to 'QuadPattern &'
Conversion loses qualifiers
Run Code Online (Sandbox Code Playgroud)
函数setCoordinate是这样的:
内联void setCoordinate(const std :: pair&value){_coordinate = value; }
为什么会出现这个错误?
我正在准备一个桌面应用程序来绘制一些2D图.我正在使用C++:Qt 5和visual studio 2013.我创建了一个简单的GUI并将myQOpenGLWidget放入其中.我已经使用自己的openGl着色器绘制了图形,轴和刻度.一切正常,现在我想将描述添加到我的轴和刻度线,以使图形可以分析.就像在OpenGL中一样,没有用于渲染文本的专用函数,我想出了使用QPainter对象只是为了已经创建的绘图添加了所需的描述.以下是开始的问题......
这是我的QopenGLWidget实现的功能:
void GLWidget::initializeGL() {
initializeOpenGLFunctions();
glEnable(GL_POINT_SPRITE);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
vertexShad = new QOpenGLShader(QOpenGLShader::Vertex);
fragmentShad = new QOpenGLShader(QOpenGLShader::Fragment);
bool flag = vertexShad->compileSourceFile(QString("vs.glsl"));
if (flag) printf("compiled vertex Shader\n");
flag = fragmentShad->compileSourceFile(QString("fs.glsl"));
if (flag) printf("compiled fragment Shader\n");
flag = program.addShader(vertexShad);
if (flag) printf("linked vertex Shader\n");
flag = false;
flag =program.addShader(fragmentShad);
if (flag) printf("linked fragment Shader\n");
program.link();
program.bind();
}
Run Code Online (Sandbox Code Playgroud)
paintGL:
void GLWidget::paintGL() {
painter = new QPainter(this);
painter->beginNativePainting();
glViewport(0, 0, this->width(), this->height());
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
drawAxes();
glViewport(MARGIN, …Run Code Online (Sandbox Code Playgroud) 我有一个 css 文件(我想解析它并适应 Qt,但这不是问题)。就说这个吧:
QLineEdit:hover:not(focus),
QWidget QPlainTextEdit:not(hover):not(focus) {
border-color: #5575b0;
}
Run Code Online (Sandbox Code Playgroud)
我制作了一个 CMake 脚本来替换not(...)为!...: 脚本的该部分工作正常。
问题是 CMake 删除了;行尾的分号 ()。当我做:
file(READ ${INPUT_FILE_PATH} CONTENT)
message(${CONTENT})
Run Code Online (Sandbox Code Playgroud)
不幸的是,输出是:
QLineEdit:hover:not(focus),
QWidget QPlainTextEdit:not(hover):not(focus) {
border-color: #5575b0 // <-- missing comma here !
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么会发生这种情况?以及如何避免呢?
将文本写入QLineEdit窗口小部件的过程是什么,在QTextEdit已包含某些文本的内部动态显示?
例如,让我们说一个人QLineEdit要求写一个"John"的名字.是否可以在QTextEdit包含的内容中实时显示:
这个名字是 + textFromQLineEdit+ ,24岁?
显示的文本必须动态地考虑对其进行的更改,QLineEdit以便用户无需按下按钮或按Enter键以查看他/她的姓名.
以下是使用的信号中的两个小部件彼此连接的最小代码textChanged()从QLineEdit与狭槽setText()从QTextEdit(不允许用于添加一些文本之前和之后从文本QLineEdit):
#include <QLineEdit>
#include <QVBoxLayout>
#include <QGroupBox>
#include <QTextEdit>
#include <QApplication>
class SmallWindow : public QWidget
{
Q_OBJECT
public:
SmallWindow();
private:
QLineEdit *nameLine;
QTextEdit *textBox;
};
SmallWindow::SmallWindow() : QWidget()
{
setFixedSize(300,250);
QLineEdit *nameLine = new QLineEdit;
QTextEdit *textBox = new QTextEdit;
QWidget::connect(nameLine,SIGNAL(textChanged(QString)),textBox,SLOT(setText(QString)));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(nameLine);
layout->addWidget(textBox); …Run Code Online (Sandbox Code Playgroud) 当我尝试连接BASE类信号时,Qt告诉我DERIVED类上不存在信号.
这是为什么?如何告诉connect使用BASE类?
namespace MyNamespace
{
void register(Derived* derived)
{
// ERROR MSG
// QObject::connect: No such signal MyNamespace::Derived::baseSignal()
QObject::connect( derived, SIGNAL(baseSignal()),
foo, SLOT(fooSlot()));
}
class Base : public QObject
{
Q_OBJECT
signals:
void baseSignal();
};
class Derived : public QObject,
public Base
{
Q_OBJECT
signals:
void derivedSignal();
};
} // namespace MyNamespace
Run Code Online (Sandbox Code Playgroud) 我正在使用Qt 4.5将.ts文件翻译成.qm文件.但现在我丢失了.ts文件.
我怎样才能将其转换回-从.qm到.ts?
所以,我有简单的代码
QMap<QColor, int> colors;
for(int w = 0; w < image.width(); ++w)
for (int h = 0; h < image.height(); ++h)
colors[QColor::fromRgb(image.pixel(w,h))]++;
Run Code Online (Sandbox Code Playgroud)
错误消息是
不匹配'operator <'(操作数类型是'const QColor'和'const QColor').
因此,qMapLessThanKey尝试实例化两种颜色的比较器是不成功的,这是不可能的.
问题是:是否可以将QColor作为值存储在QMap中,而不是通过引用?
只是好奇.我知道如何以其他方式写出我想要的东西.但奇怪的是,在QT中我可以存储在地图中或不能存储的任何例外情况.
我正在尝试编写一个使用DOM来编写注册列表的类,以XML格式存档.注册列表包含三种类型的注册Registration,它们是标准的基本注册类GuestRegistration,StudentRegistration它们都来自Registration.
该GuestRegistration班级有一个独特的成员category,学生注册有独特的成员qualification.
当我遍历注册指针列表时,我只能访问基类Registration的成员函数.有没有什么办法可以访问子的数据成员使用getter函数getCategory和getQualification?每当类名与两者中的任何一个匹配时,我都尝试创建一个GuestRegistration和StudentRegistration指针,但是得到一个指针转换错误.
void RegistrationListWriter::write(RegistrationList r) {
QList<Registration*> regList = r.getRegistrationList();
for (int i = 0; i < regList.size(); ++i) {
QString cn = regList.at(i)->metaObject()->className();
Person tempPerson = regList.at(i)->getAttendee();
appendRegistrationAndType(cn);
appendAttendee(tempPerson);
//this is where my issue starts
if (cn == "GuestRegistration") {
GuestRegistration guestReg = regList.at(i);
appendAttendeeCatagory(guestReg.getCatagory());
}
if (cn == "StudentRegistration") {
StudentRegistration* stuReg = …Run Code Online (Sandbox Code Playgroud) 我试过.text使用 eg在段中声明变量file_handle: dd 0。
但是,尝试在此变量中存储某些内容会mov [file_handle], eax导致写入错误。
我知道,我可以在.data段中声明可写变量,但为了使代码更紧凑,我想像上面一样尝试。
是使用堆栈来存储这些值(例如文件句柄)的唯一可能性,还是我可以以某种方式写入上面的变量?