Drawing problem, some area does not draw well on Windows machine.
-
hello,
I wrote a very simple code by QML and run it on Windows.
Anyway, when I run it on Linux, there isn't any problem.
In this code, I load slot1.qml in unit.qml by four times.
But I found the third one does not draw well.Please see the below URL, where I uploaded the problem picture.
Only the third one from left side has the drawing problem.
http://ameblo.jp/jianghaiying2002/entry-11768624153.htmlAnd also please see the below code.
unit.qml
@
import QtQuick 2.0
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.0Item {
width: 1200; height: 650
Rectangle {
id: rectangle1
width: 50
height: 400
color: "lightyellow"
border.color: "black"
Label {
anchors.centerIn: parent
text: "UNIT"
rotation: 90
}
}Item { id: slots anchors {left: rectangle1.right; leftMargin: 10; top: rectangle1.top} width:990 height: 300 Row{ Item{ width: (slots.width)/16; height:300 Loader{ source: "slot1.qml" } } Item{ width: (slots.width)/16; height:300 } Item{ width: (slots.width)/16; height:300 Loader{ source: "slot1.qml" } } Item{ width: (slots.width)/16; height:300 } Item{ width: (slots.width)/16; height:300 Loader{ source: "slot1.qml" } } Item{ width: (slots.width)/16; height:300 } Item{ width: (slots.width)/16; height:300 Loader{ source: "slot1.qml" } } } }
}
@slot1.qml
@
import QtQuick 2.0
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.0Rectangle {
id: slot1
width: 120
height: 300
color: "#d4d4d4"
border.color: "#625a5a"Text{ x: 26 anchors.top: parent.top text: "slot1" font.family: "Verdana" anchors.topMargin: 33 } Rectangle { id: rectangle1 x: 53 y: 116 width: 10 height: 10 border.color: "#625b5b" } Rectangle { id: rectangle2 x: 53 y: 137 width: 10 height: 10 border.color: "#625b5b" } Rectangle { id: rectangle3 x: 53 y: 160 width: 10 height: 10 border.color: "#625b5b" } Label { id: label1 x: 13 y: 137 width: 37 height: 10 text: "PORT1" horizontalAlignment: Text.AlignRight font.pointSize: 8 } Label { id: label2 x: 12 y: 116 width: 38 height: 10 text: "PORT2" horizontalAlignment: Text.AlignRight font.pointSize: 8 } Label { id: label3 x: 13 y: 160 width: 37 height: 10 text: "PORT3" horizontalAlignment: Text.AlignRight font.pointSize: 8 } Label { id: label4 x: 43 y: 283 text: "#1" font.pointSize: 8 style: Text.Normal font.family: "Verdana" horizontalAlignment: Text.AlignHCenter } Rectangle { id: rectangle4 anchors{left: parent.left; top: parent.top; margins: 10} width: 15 height:8 radius: 15 color: "#028000" border.color: "black" }
}
@main.cpp
@
#include <QtQuick/QQuickView>
#include <QGuiApplication>int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); view.setSource(QUrl("qrc:///unit.qml")); view.show(); return app.exec();
}
@Thanks!
-
I can't see any problem in the unit.qml, would you mind trying to set antialiasing: true in your third item or slot1.qml so we can see what it does?
-
hello, thanks for your reply.
I tried, but the problem is still only on the third one.
Please see the result below.
http://ameblo.jp/jianghaiying2002/entry-11768624153.htmlAnd please see the new code, in which I added "antialiasing: true".
Anyway, I also tried "antialiasing: true" at somewhere alse, but still does not draw well.
Did I add it at wrong place?unit.qml
@import QtQuick 2.0
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.0Item {
width: 1200; height: 650
Rectangle {
id: rectangle1
width: 50
height: 400
color: "lightyellow"
border.color: "black"
}Item { id: slots anchors {left: rectangle1.right; leftMargin: 10; top: rectangle1.top} width:990 height: 300 Row{ Item{ width: (slots.width)/16; height:300 Loader{ source: "slot1.qml" } } Item{ width: (slots.width)/16; height:300 } Item{ width: (slots.width)/16; height:300 Loader{ source: "slot1.qml" } } Item{ width: (slots.width)/16; height:300 } Item{ width: (slots.width)/16; height:300 antialiasing: true Loader{ source: "slot1.qml" } } Item{ width: (slots.width)/16; height:300 } Item{ width: (slots.width)/16; height:300 Loader{ source: "slot1.qml" } } } }
}@
slot1.qml
@import QtQuick 2.0
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.0Rectangle {
id: slot1
width: 120
height: 300
color: "#d4d4d4"
border.color: "#625a5a"
antialiasing: trueText{ x: 26 anchors.top: parent.top text: "slot1" font.family: "Verdana" anchors.topMargin: 33 } Label { id: label1 x: 13 y: 137 width: 37 height: 10 text: "PORT1" horizontalAlignment: Text.AlignRight font.pointSize: 12 } Label { id: label2 x: 12 y: 116 width: 38 height: 10 text: "PORT2" horizontalAlignment: Text.AlignRight font.pointSize: 12 } Label { id: label3 x: 13 y: 160 width: 37 height: 10 text: "PORT3" horizontalAlignment: Text.AlignRight font.pointSize: 12 } Label { id: label4 x: 43 y: 283 text: "#1" font.pointSize: 12 style: Text.Normal horizontalAlignment: Text.AlignHCenter }
}@
-
I have tried it out without antialiasing and it worked fine. I was using the QtQuick2ApplicaionViewer for that. Would you mind increasing the size of your QML or the area where your QML is? If that doesn't work i would recommend you to try out another Viewer, also which qt-version are you using?
-
Thanks for your reply.
Do you mean to use QtQuick2ApplicationViewer instead of QQuickView in main.cpp? Could you share your main.cpp code?
And I'm using qt 5.2.
Thanks and regards. -
No, i was using QtQuick2ApplicaionViewer. I'll provide you the code tomorrow.
-
Thanks for your reply!
I hope to try it! -
I was using your qml-code so i won't post it again but here are the other files:
- main.qml (Your unit.qml)
- slot1.qml
- main.cpp @#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);QtQuick2ApplicationViewer viewer; viewer.setMainQmlFile(QStringLiteral("qml/forumqmltest/main.qml")); viewer.showExpanded(); return app.exec();
}@
- qtquick2applicationviewer.h (Default, unchanged) @#ifndef QTQUICK2APPLICATIONVIEWER_H
#define QTQUICK2APPLICATIONVIEWER_H
#include <QtQuick/QQuickView>
class QtQuick2ApplicationViewer : public QQuickView
{
Q_OBJECTpublic:
explicit QtQuick2ApplicationViewer(QWindow *parent = 0);
virtual ~QtQuick2ApplicationViewer();void setMainQmlFile(const QString &file); void addImportPath(const QString &path); void showExpanded();
private:
class QtQuick2ApplicationViewerPrivate *d;
};#endif // QTQUICK2APPLICATIONVIEWER_H@
- qtquick2applicationviewer.cpp (Default, unchanged) @#include "qtquick2applicationviewer.h"
#include <QtCore/QCoreApplication>
#include <QtCore/QDir>
#include <QtQml/QQmlEngine>class QtQuick2ApplicationViewerPrivate
{
QString mainQmlFile;
friend class QtQuick2ApplicationViewer;
static QString adjustPath(const QString &path);
};QString QtQuick2ApplicationViewerPrivate::adjustPath(const QString &path)
{
#if defined(Q_OS_MAC)
if (!QDir::isAbsolutePath(path))
return QString::fromLatin1("%1/../Resources/%2")
.arg(QCoreApplication::applicationDirPath(), path);
#elif defined(Q_OS_BLACKBERRY)
if (!QDir::isAbsolutePath(path))
return QString::fromLatin1("app/native/%1").arg(path);
#elif !defined(Q_OS_ANDROID)
QString pathInInstallDir =
QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path);
if (QFileInfo(pathInInstallDir).exists())
return pathInInstallDir;
pathInInstallDir =
QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path);
if (QFileInfo(pathInInstallDir).exists())
return pathInInstallDir;
#endif
return path;
}QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent)
: QQuickView(parent)
, d(new QtQuick2ApplicationViewerPrivate())
{
connect(engine(), SIGNAL(quit()), SLOT(close()));
setResizeMode(QQuickView::SizeRootObjectToView);
}QtQuick2ApplicationViewer::~QtQuick2ApplicationViewer()
{
delete d;
}void QtQuick2ApplicationViewer::setMainQmlFile(const QString &file)
{
d->mainQmlFile = QtQuick2ApplicationViewerPrivate::adjustPath(file);
#ifdef Q_OS_ANDROID
setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile));
#else
setSource(QUrl::fromLocalFile(d->mainQmlFile));
#endif
}void QtQuick2ApplicationViewer::addImportPath(const QString &path)
{
engine()->addImportPath(QtQuick2ApplicationViewerPrivate::adjustPath(path));
}void QtQuick2ApplicationViewer::showExpanded()
{
#if defined(Q_WS_SIMULATOR) || defined(Q_OS_QNX)
showFullScreen();
#else
show();
#endif
}@- qtquick2applicationviewer.pri (Default, unchanged, too big to post)
- forumqmltest.pro @# Add more folders to ship with the application, here
folder_01.source = qml/forumqmltest
folder_01.target = qml
DEPLOYMENTFOLDERS = folder_01
Additional import path used to resolve QML modules in Creator's code model
QML_IMPORT_PATH =
If your application uses the Qt Mobility libraries, uncomment the following
lines and add the respective components to the MOBILITY variable.
CONFIG += mobility
MOBILITY +=
The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp
Installation path
target.path =
Please do not modify the following two lines. Required for deployment.
include(qtquick2applicationviewer/qtquick2applicationviewer.pri)
qtcAddDeployment()OTHER_FILES +=
qml/forumqmltest/slot1.qml@The qtquick2applicationviewer is automatically generated if you create a new QtQuick2 project. I'll try the same with QtQuickView now.
-
Alright, i have tested it with QtQuickView and it works fine, too. I'll provide you the code:
- slot1.qml
- unit.qml
- main.cpp (Default, unchanged) @#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();return a.exec();
}@
- mainwindow.h (Default, unchanged) @#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H@
- mainwindow.cpp @#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QQuickView>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setGeometry(200, 200, 600, 400);
QQuickView *view = new QQuickView();
view->setSource(QUrl("qrc:/qml/unit.qml"));
QWidget *container = QWidget::createWindowContainer(view, this);
container->setGeometry(0, 0, 600, 400);
container->show();
}MainWindow::~MainWindow()
{
delete ui;
}@- mainwindow.ui @<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>21</height>
</rect>
</property>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>@ - rsc.qrc @<RCC>
<qresource prefix="/qml">
<file>slot1.qml</file>
<file>unit.qml</file>
</qresource>
</RCC>@ - qtquickviewtest.pro @QT += core gui quick
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = qtquickviewtest
TEMPLATE = appSOURCES += main.cpp
mainwindow.cppHEADERS += mainwindow.h
FORMS += mainwindow.ui
OTHER_FILES +=
unit.qml
slot1.qmlRESOURCES +=
rsc.qrc@I would guess that it's a bug. Which QT version are you using?
-
Thanks very much for your sharing the code. I will try it later.
I also guess it is a bug.
I'm using Qt 5.2.0 MSVC2012 32bit.Thanks again and regards!!!
-
Yes, try it out and tell me if it worked. It seems to be a bug if the same code doesn't work in Qt 5.2.0. There isn't such a big difference between 5.2.0 and 5.2.1. Also have you tried your project with a QQuickView, yet?
-
Hello, I tried your code, but still had the same problem.
Please see the below URL, the second picture is the result of your code.
http://ameblo.jp/jianghaiying2002/entry-11768624153.htmlYes, I have tried my code, the first picture is the result of my code, the following code.
test.pro
@QT += qml quick declarative webkitSOURCES += main.cpp
RESOURCES += test.qrc
DESTPATH = /home/qt3/qttest/test
target.path = $$DESTPATHqml.files = *.qml
qml.path = $$DESTPATHINSTALLS += target qml
OTHER_FILES +=
unit.qml
slot1.qml @main.cpp
@#include <QtQuick/QQuickView>
#include <QGuiApplication>int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); view.setSource(QUrl("qrc:///unit.qml")); view.show(); return app.exec();
}@
test.qrc
@<RCC>
<qresource prefix="/">
<file>unit.qml</file>
<file>slot1.qml</file>
</qresource>
</RCC>@and unit.qml, slot1.qml
I will try it on Qt5.2.1 later.
Thanks again. -
Hello, it looks like a bug to me. Would you mind posting your issue here:
"Bugreports":https://bugreports.qt-project.org/secure/Dashboard.jspaAlso could you please tell me if and which graphics card you're using?
-
Hello, the graphics card in my windows machine is Mobile Intel 4 Series Express Chipset Family.
And I will try to issue the bug later.