में ज़ूम करने के दौरान आप एक क्विक और गंदा प्रोग्राम कैसे लिखते हैं, जिस पर मैंने काम कर रहे एक प्रोजेक्ट के पहलू को देखने में मदद करने के लिए एक त्वरित और बुरा कार्यक्रम लिखा है। हालांकि मैं 4.1.1 के बाद से क्यूटी के साथ काम कर रहा हूं, मुझे कभी भी क्यूग्राफिक्स * मॉड्यूल का उपयोग करने की ज़रूरत नहीं है।क्यूपीएन पिक्सेल चौड़ाई को क्यूपीआरपीक्स व्यू
जब मैंने प्रोग्राम के साथ खेलना शुरू किया, तो मैं विंडोज़ XP और Qt4.7.0 और विजुअल स्टूडियो 2008 चलाने वाले पुराने कंप्यूटर पर काम कर रहा था। अब मैंने फाइल को विंडोज 8 पर चलने वाले अपने मुख्य कंप्यूटर पर कॉपी किया है। क्यूटी 5 को एक शॉट देने का फैसला किया है इसलिए मैंने Qt5.0.2 के साथ QtCreator स्थापित किया है।
जब मैं Qt4.7.0/XP मशीन पर बनाए गए सटीक कोड को संकलित करता हूं, तो मुझे एक बहुत अलग परिणाम मिलता है।
और यह है कि क्या मैं अपने Qt5.0.2 संकलन पर देखते हैं:
यह वही है मैं अपने Qt4.7.0 संकलन पर देखते हैं
जाहिर है वहाँ में अलग व्यवहार है प्रत्येक आयत की सीमा का चित्रण। इसके अलावा, अगर मैं माउस व्हील का उपयोग करके ज़ूम करता हूं, तो आयताकार सीमा चौड़ाई Qt5 संकलन में बड़ी हो जाती है लेकिन Qt4.7 संकलन में वही (लगभग 1 पिक्सेल चौड़ी) रहता है।
मैं कोड कैसे बदलूं ताकि Qt5 में व्यवहार Qt4.7 जैसा ही हो?
यहाँ पूर्ण कोड है:
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#include <QWheelEvent>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QVariant>
#include <QSqlError>
#include <QMessageBox>
class ItemData : public QSqlRecord{
public:
ItemData(QSqlRecord const &rec) : QSqlRecord(rec) {}
qreal left() const { return value(0).toDouble(); }
qreal top() const { return value(1).toDouble(); }
qreal width() const { return value(2).toDouble() - left(); }
qreal height() const { return value(3).toDouble() - top(); }
QRectF rect() const { return QRectF(left(), top(), width(), height()); }
QString barcode() const { return value(4).toString(); }
QString msaName() const { return value(5).toString(); }
QString msaDescription() const { return value(6).toString(); }
QString hsaName() const { return value(7).toString(); }
QString hsaDescription() const { return value(8).toString(); }
};
class DSAItem : public QGraphicsRectItem{
public:
DSAItem(ItemData const &data, QGraphicsItem *parent = 0)
:QGraphicsRectItem(parent) {
setFlags(QGraphicsItem::ItemIsSelectable);
setRect(data.rect());
QString tip = "<p><b>%1</b></p><p><b>MLSA</b><br/>%2<br/>%3</p><p><b>HLSA</b><br/>%4<br/>%5</p>";
setToolTip(tip.arg(data.barcode(), data.msaName(), data.msaDescription(), data.hsaName(), data.hsaDescription()));
if(data.barcode() == "1010100101" || data.barcode() == "1010100114"){
colour = QColor(Qt::red);
} else {
colour = QColor(Qt::yellow);
}
colour.setAlphaF(.5);
setBrush(QBrush(colour));
}
QVariant itemChange(GraphicsItemChange change, QVariant const &value){
if (change == QGraphicsItem::ItemSelectedHasChanged){
QColor c = value.toBool() ? QColor(Qt::green) : colour;
c.setAlphaF(.5);
setBrush(QBrush(c));
update(rect());
}
return QGraphicsRectItem::itemChange(change, value);
}
private:
QColor colour;
};
class View : public QGraphicsView {
public:
View(QWidget *parent = 0): QGraphicsView(parent){
populateScene();
setScene(&scene);
rotate(-90);
scale(1.0, -1.0);
setDragMode(ScrollHandDrag);
}
protected:
void wheelEvent(QWheelEvent *e){
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
double scaleFactor = 1.15;
if (e->delta() > 0){
scale(scaleFactor, scaleFactor);
} else {
scale(1/scaleFactor, 1/scaleFactor);
}
}
private:
void populateScene(){
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
//db credentials here
QString errorMessage;
bool ok = db.open();
if (ok){
QSqlQuery query(db);
QString sql = //query string here
if (query.exec(sql)){
while(query.next()){
scene.addItem(new DSAItem(query.record()));
}
} else {
errorMessage = query.lastError().text();
}
} else {
errorMessage = db.lastError().text();
}
if (!errorMessage.isEmpty()){
QMessageBox::critical(0, "Database Error", errorMessage);
}
}
private:
QGraphicsScene scene;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
View view;
view.show();
return a.exec();
}
यह पहला बातें मैंने कोशिश की थी, लेकिन कोई, Qt5 में नहीं बल्कि Qt4.7 – RobbieE
QPen :: setWidth के लिए डॉक्स में आइटम के साथ कलम चौड़ाई तराजू() कहते हैं "शून्य की एक लाइन चौड़ाई एक कॉस्मेटिक कलम इंगित करता है। इसका मतलब है कि पेन चौड़ाई हमेशा एक पिक्सेल चौड़ी खींची जाती है, जो चित्रकार पर परिवर्तन सेट से स्वतंत्र होती है। " क्या आपने चौड़ाई को 0 पर सेट करने का प्रयास किया है? –
यह है !!! धन्यवाद कॉरी। संस्करणों के बीच डिफ़ॉल्ट मान बदलना चाहिए। एक उत्तर बनाएं और मैं आपको क्रेडिट दूंगा। – RobbieE